package www.study.com;

//N 字形变换 https://leetcode.cn/problems/zigzag-conversion/
public class code6 {
    public static void main(String[] args) {

    }

    /**
     * ans[i][j]：模拟变换后第i行第j列存储的字符，其中i从1开始，j从1开始，ans[i][0]代表第i行存储的字符个数，因此
     * 如果一个新字符要加入第i行，那么它加入的列就在ans[i][0] + 1的位置
     */
    class Solution {
        public String convert(String s, int numRows) {
            if(numRows == 1) return s;
            int[][] ans = new int[numRows + 1][s.length() + 1]; //一定要是“s.length() + 1”，否则用例"A" 2 无法通过的
            int pos = 1,add = 1; //pos代表当前行号，add表示增量
            for(int i = 0 ; i < s.length() ; i++){
                if(pos == 1){
                    add = 1;
                }else if(pos == numRows){
                    add = -1;
                }
                ans[pos][++ans[pos][0]] = i;//ans[pos][0]代表第pos行存储的字符的个数
                pos += add;
            }
            StringBuilder res = new StringBuilder();
            for(int i = 1 ; i <= numRows ; i++){
                for(int j = 1 ; j <= ans[i][0] ; j++){
                    res.append(s.charAt(ans[i][j]));
                }
            }
            return res.toString();
        }
    }
}
